// pages/unmark/unmark.js
const util = require('../../utils/util.js')
Page({

    /**
     * 页面的初始数据
     */
    data: {
        autosize: { minHeight: 150 },
        inputDisabled: false,
        buttonStatus: 'disabled',
        medias: null
    },

    /**
     * 生命周期函数--监听页面加载
     */
    onLoad(options) {

    },

    /**
     * 生命周期函数--监听页面初次渲染完成
     */
    onReady() {

    },

    /**
     * 生命周期函数--监听页面显示
     */
    onShow() {

    },

    /**
     * 生命周期函数--监听页面隐藏
     */
    onHide() {

    },

    /**
     * 生命周期函数--监听页面卸载
     */
    onUnload() {

    },

    /**
     * 页面相关事件处理函数--监听用户下拉动作
     */
    onPullDownRefresh() {

    },

    /**
     * 页面上拉触底事件的处理函数
     */
    onReachBottom() {

    },

    /**
     * 用户点击右上角分享
     */
    onShareAppMessage() {

    },
    navBack() {
        wx.navigateBack()
    },
    onShareLinkChange(e) {
        let shareLink = e.detail;
        this.data.shareLink = shareLink;
        if (shareLink) {
            this.setData({
                buttonStatus: 'clickable'
            });
        } else {
            this.setData({
                buttonStatus: 'disabled'
            });
        }
    },
    analyze() {
        if (this.data.buttonStatus != 'clickable') {
            return;
        }
        this.setData({
            buttonStatus: 'loading',
            inputDisabled: true,
            medias: null
        });
        let shareLink = this.data.shareLink;
        let mediaUrl = this.urlify(shareLink);
        console.log(mediaUrl);
        if (mediaUrl == null) {
            wx.showToast({
                title: '分享链接不合法',
                icon: 'error',
            });
            this.setData({
                buttonStatus: 'clickable',
                inputDisabled: false
            });
            return;
        }
        util.requestApi('getUnmark', {
            mediaUrl: mediaUrl
        }).then(res => {
            console.log(res)
            let res1 = res.result;
            if (res1.code != '200') {
                wx.showToast({
                    title: res1.msg,
                    icon: 'error',
                })
                return;
            }
            let data = res1.data;
            var medias = []
            if (data.pics != null) {
                for (let i = 0; i < data.pics.length; i++) {
                    let picUrl = data.pics[i];
                    medias.push({
                        url: picUrl,
                        type: 'image'
                    });
                }
            }
            if (data.down != null) {
                medias.push({
                    url: data.down,
                    type: 'video',
                    poster: data.cover
                });
            }
            if (medias.length == 0) {
                wx.showToast({
                    title: '无数据',
                    icon: 'error',
                })
                return;
            }
            this.setData({
                medias: medias
            })
        }).catch(err => {
            console.log(err);
            wx.showToast({
                title: '解析失败',
                icon: 'error',
            })
        }).finally(()=>{
            this.setData({
                buttonStatus: 'clickable',
                inputDisabled: false
            });
        })
        // wx.request({
        //     url: 'https://api.ake999.com/api/dsp/32ECF5188388F9BC33BE926B6E18E758FCD709C48F03D454D3/202037144/?url=' + mediaUrl,
        //     enableCache: true,
        //     success: (res) => {

        //     },
        //     fail: (res) => {

        //     },
        //     complete: (res) => {
                
        //     }
        // })
    },
    urlify(text) {
        const urlRegex = /(\b(https?):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig;
        let res = text.match(urlRegex);
        return res == null ? null : res[0];
    },
    preview() {
        let medias = this.data.medias;
        wx.previewMedia({
            sources: medias,
        })
    },
    saveAll() {
        this.downloadMedias(this.data.medias);
    },
    //此方法是单独下载每个图片，使用promise返回后通过 .then()方法继续下一个
    saveOne(media) {
        let this_ = this;
        let url = media.url;
        let type = media.type;
        url = url.replace('http://', 'https://');
        return new Promise((resolve, reject) => {
            wx.downloadFile({
                url: url,
                success: function (res) {
                    var temp = res.tempFilePath
                    if (type == 'image') {
                        wx.saveImageToPhotosAlbum({
                            filePath: temp,
                            success(res) {
                                console.log(res)
                                return resolve(res)
                            },
                            fail: function (err) {
                                reject(err)
                            }
                        })
                    }
                    else if (type == 'video') {
                        wx.saveVideoToPhotosAlbum({
                            filePath: temp,
                            success(res) {
                                console.log(res)
                                return resolve(res)
                            },
                            fail: function (err) {
                                reject(err)
                            }
                        })
                    }
                },
                fail: function (err) {
                    this_.report('download_err', err);
                    if (err.errno == '600002') {
                        let msg = err.errMsg.split(':')[2];
                        this_.report('download_domain', {
                            errno: 600002,
                            errMsg: msg,
                            url: url
                        });
                    }
                    reject(err)
                }
            })
        })
    },

    //此方法循环将网络地址图片下载为临时地址图片，方便保存处理  
    // 这里使用了promise具体思路请看代码，不再赘述
    downloadMedias(medias) {
        let this_ = this;
        wx.showLoading({
            title: '文件下载中',
            mask: true
        })
        // 循环数组
        let futures = [];
        for (let i = 0; i < medias.length; i++) {
            futures.push(this.saveOne(medias[i]));
        }
        // Promise.all 所有图片下载完成后弹出
        Promise.all(futures)
            .then(res => {
                wx.showToast({
                    title: '下载完成',
                    icon: 'success'
                })
            })
            .catch(err => {
                this_.report('save_err', err);
                wx.showToast({
                    title: `保存失败，请尝试预览并手动保存`,
                    icon: 'error',
                    duration: 3000
                })
            })
    },
    report(id, err) {
        wx.reportEvent(id, {
            "errno": err.errno,
            "msg": err.errMsg,
            "url": err.url
        })
    }
})